package callback;


import java.util.Map;
import java.util.Set;

/**
*
* Description:
* @author admin
* 2017年2月10日下午18:04:07
*/

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;



/**
* 发布消息的回调类
*
* 必须实现MqttCallback的接口并实现对应的相关接口方法CallBack 类将实现 MqttCallBack。
* 每个客户机标识都需要一个回调实例。在此示例中，构造函数传递客户机标识以另存为实例数据。
* 在回调中，将它用来标识已经启动了该回调的哪个实例。
* 必须在回调类中实现三个方法：
*
*  public void messageArrived(MqttTopic topic, MqttMessage message)接收已经订阅的发布。
*
*  public void connectionLost(Throwable cause)在断开连接时调用。
*
*  public void deliveryComplete(MqttDeliveryToken token))
*  接收到已经发布的 QoS 1 或 QoS 2 消息的传递令牌时调用。
*  由 MqttClient.connect 激活此回调。
*
*/
public final class MqttclientCallback implements MqttCallback {
	

   public void connectionLost(Throwable cause) {
       //连接丢失后，一般在这里面进行重连
       System.out.println("mqttclient连接断开，做重连....");
      
       //ZFconf.getMqttclient().setIsConnect(false);//告诉连接失败
   }

   public void deliveryComplete(IMqttDeliveryToken token) {
	   //发布的消息有客户端收到这里自动执行
	   
       //System.out.println("deliveryComplete---------" + token.isComplete());
   }

   public void messageArrived(String topic, MqttMessage message) throws Exception {
       // subscribe后得到的消息会执行到这里面
       System.out.println("消息主题 : " + topic);
      System.out.println("消息Qos : " + message.getQos());
       String mString = new String(message.getPayload(),"UTF-8");//所有接收的数据都要统一编码规则
       System.out.println("消息内容 : " +mString ); 
       
   }
}
